package com.example.onlinemusic.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: H_tao_X
 * Date: 2022-12-05
 * Time: 0:19
 */

//@Configuration：表明当前类是一个配置类，被注解的类内部包含有一个或多个被@Bean注解的方法，用于构建
//bean定义，初始化Spring容器。
//@Bean注解：用于告诉方法，产生一个Bean对象，然后这个Bean对象交给Spring管理。产生这个Bean对象的方
//法Spring只会调用一次，随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
//SpringIOC 容器管理一个或者多个bean，这些bean都需要在@Configuration注解下进行创建，在一个方法上使用
//@Bean注解就表明这个方法需要交给Spring进行管理。
@Configuration
public class AppConfig implements WebMvcConfigurer {
    @Bean
    public BCryptPasswordEncoder getBCryptPasswordEncoder() {
        return  new BCryptPasswordEncoder();
    }



    /**
     * 添加 拦截器：
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        // 登录只有才能访问其他的页面
        LoginInterceptor loginInterceptor = new LoginInterceptor();

        registry.addInterceptor(loginInterceptor)

                .addPathPatterns("/**")//添加拦截路径，这里表示拦截所有路径
                //下面表示不拦截这些内容
                .excludePathPatterns("/js/**.js")
                //排除images下所有的元素
                .excludePathPatterns("/images/**")
                .excludePathPatterns("/css/**.css")
                .excludePathPatterns("/fronts/**")
                .excludePathPatterns("/player/**")
                .excludePathPatterns("/login.html")
                .excludePathPatterns("/logon.html")
                //排除登录接口
                .excludePathPatterns("/user/logon")
                .excludePathPatterns("/user/login");
    }
}
